import java.util.Stack;

/*
 * @author zzr
 * @date: 2025/10/14  18:23
 * @description: 给定一个字符串数组 tokens 根据逆波兰表达式
 * 计算该表达式的值
 */
public class Demo17 {
    public int evalRPN(String[] tokens) {

        Stack<Integer> stack = new Stack<>();
        // 遍历表达式的每一个字符
        for (String s : tokens) {
            // 如果不是操作符，则将字符放入栈中
            if (!isOperation(s)) {
                // 因为表达式中的类型是字符，将操作数转换成 Int 类型
                stack.push(Integer.parseInt(s));
            } else {
                // 第一个弹出的数据为右操作数
                int num2 = stack.pop();
                int num1 = stack.pop();
                switch (s) {
                    case "+":
                        stack.push(num1 + num2);
                        break;
                    case "-":
                        stack.push(num1 - num2);
                        break;
                    case "*":
                        stack.push(num1 * num2);
                        break;
                    case "/":
                        stack.push(num1 / num2);
                        break;
                }
            }
        }
        // 最后剩下的数据就是最终结果
        return stack.pop();
    }

    private boolean isOperation(String s) {
        if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {
            return true;
        }
        return false;
    }

}
